package com.toro.dao;

import com.toro.domain.Group;
import io.netty.channel.Channel;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

/**
 * @ClassName: GroupSession
 * @Description: 聊天组会话管理接口
 * @Author: ToroLHZ
 * @Date: 2023/12/11 17:36
 */
public interface GroupSession {

    /**
     * @Description: 创建一个聊天组
     * @Param: [name, members] 组名 成员
     * @Return: 成功时返回组对象, 失败返回 null
     * @Author: ToroLHZ
     * @Date: 2023/12/11 17:37
     **/
    void createGroup(String name, ArrayList<String> members,String creator);

    /**
     * @Description: 加入聊天组
     * @Param: [name, member] 组名 成员名
     * @Return: Group 如果组不存在返回 null, 否则返回组对象
     * @Author: ToroLHZ
     * @Date: 2023/12/11 17:38
     **/
    Group joinMember(String name, String member);


    /**
     * @Description: 移除组成员
     * @Param: [name, member] 组名 成员名
     * @Return: com.toro.server.session.Group 如果组不存在返回 null, 否则返回组对象
     * @Author: ToroLHZ
     * @Date: 2023/12/11 17:38
     **/
    void removeMember(String name, String member);

    /**
     * @Description: 移除聊天组
     * @Param: [name]组名
     * @Return: com.toro.server.session.Group 如果组不存在返回 null, 否则返回组对象
     * @Author: ToroLHZ
     * @Date: 2023/12/11 17:39
     **/
    Group removeGroup(String name);

    /**
     * @Description: 获取组成员
     * @Param: [groupName] 组名
     * @Return: java.util.Set<java.lang.String> 成员集合, 没有成员会返回 empty set
     * @Author: ToroLHZ
     * @Date: 2023/12/11 17:40
     **/
    List<String> getMembers(String groupName);

    /**
     * @Description: 获取组成员的 channel 集合, 只有在线的 channel 才会返回
     * @Param: [name] 组名
     * @Return: java.util.List<io.netty.channel.Channel> 成员 channel 集合
     * @Author: ToroLHZ
     * @Date: 2023/12/11 17:40
     **/
    List<Channel> getMembersChannel(String groupName);
    /**
     * @Description: 查看群是否存在，存在返回true,不存在返回false
     * @Param: [groupName]
     * @Return: boolean
     * @Author: ToroLHZ
     * @Date:  2023/12/24 15:39
     **/
    boolean EmptyGroup(String groupName);
}
